package com.tools.web.work.dictionary;

import com.tools.common.object.Note;

import java.util.Objects;

/**
 * 字典详情数据项的 Item 实例
 * */
@Note("字典详情数据项的 Item 实例")
public class DictItemVO extends StrItem {

    @Note("【字典】标签展示的颜色类型名称。用于给前端渲染标签的 class 名称")
    private String tagTypeName;

    /* **************************************************************************************
     *
     *          构造器
     *
     * **************************************************************************************
     * */

    public DictItemVO() {
        super();
    }

    public DictItemVO(String value, String label) {
        super(value, label);
    }

    public DictItemVO(String value, String label, String tagTypeName) {
        super(value, label);
        this.setTagTypeName(tagTypeName);
    }

    public static DictItemVO of() {
        return new DictItemVO();
    }

    public static DictItemVO of(String value, String label) {
        return new DictItemVO(value, label);
    }

    public static DictItemVO of(String value, String label, String tagTypeName) {
        return new DictItemVO(value, label, tagTypeName);
    }

    /* **************************************************************************************
     *
     *          Getter / Setter
     *
     * **************************************************************************************
     * */

    public String getTagTypeName() {
        return tagTypeName;
    }

    public void setTagTypeName(String tagTypeName) {
        this.tagTypeName = tagTypeName;
    }

    @Override
    public String toString() {
        return "DictItem{" +
                "value=" + super.getValue() +
                ", label=" + super.getLabel() +
                ", tagTypeName=" + tagTypeName +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        DictItemVO dictItemVO = (DictItemVO) o;
        return Objects.equals(tagTypeName, dictItemVO.tagTypeName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), tagTypeName);
    }

    /* **************************************************************************************
     *
     *          链式方法
     *
     * **************************************************************************************
     * */

    @Override
    public DictItemVO value(String value) {
        this.setValue(value);
        return this;
    }

    @Override
    public DictItemVO label(String label) {
        this.setLabel(label);
        return this;
    }

    public DictItemVO tagTypeName(String tagTypeName) {
        this.setTagTypeName(tagTypeName);
        return this;
    }
}
